<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="shortcut icon" href="dlib-icon.ico"><meta name="verify-v1" content="02MiiaFNVzS5/u0eQhsy3/knioFHsia1X3DXRpHkE6I="><meta name="google-site-verification" content="DGSSJMKDomaDaDTIRJ8jDkv0YMx9Cz7OESbXHjjr6Jw"><title>dlib C++ Library
   - API Wrappers</title><script language="JavaScript">

// ---------------------------------------------
// --- Name:    Easy DHTML Treeview           --
// --- Author:  D.D. de Kerf                  --
// --- Version: 0.2          Date: 13-6-2001  --
// ---------------------------------------------
function Toggle(node)
{
   // Unfold the branch if it isn't visible
   var next_node = node.nextSibling;
   if (next_node.style.display == 'none')
   {
      // Change the image (if there is an image)
      if (node.childNodes.length > 0)
      {
         if (node.childNodes.length > 0)
         { 
            if (node.childNodes.item(0).nodeName == "IMG")
            {
               node.childNodes.item(0).src = "minus.gif";
            }
         }
      }

      next_node.style.display = 'block';
   }
   // Collapse the branch if it IS visible
   else
   {
      // Change the image (if there is an image)
      if (node.childNodes.length > 0)
      {
         if (node.childNodes.length > 0)
         { 
            if (node.childNodes.item(0).nodeName == "IMG")
            {
               node.childNodes.item(0).src = "plus.gif";
            }
         }
      }

      next_node.style.display = 'none';
   }

}
function BigToggle(node)
{
   // Unfold the branch if it isn't visible
   var next_node = node.nextSibling;
   if (next_node.style.display == 'none')
   {
      // Change the image (if there is an image)
      if (node.childNodes.length > 0)
      {
         if (node.childNodes.length > 0)
         { 
            if (node.childNodes.item(0).nodeName == "IMG")
            {
               node.childNodes.item(0).src = "bigminus.gif";
            }
         }
      }

      next_node.style.display = 'block';
   }
   // Collapse the branch if it IS visible
   else
   {
      // Change the image (if there is an image)
      if (node.childNodes.length > 0)
      {
         if (node.childNodes.length > 0)
         { 
            if (node.childNodes.item(0).nodeName == "IMG")
            {
               node.childNodes.item(0).src = "bigplus.gif";
            }
         }
      }

      next_node.style.display = 'none';
   }

}
</script><style type="text/css">
   body {margin:0px;}
   pre {margin:0px;}

   ul.tree  li { list-style: none;  margin-left:10px;} 
   ul.tree  { margin:0px; padding:0px; margin-left:5px; font-size:0.95em; }
   ul.tree  li ul { margin-left:10px; padding:0px; }

   li#term { list-style: none; }

   div#component {
      background-color:white; 
      border: 2px solid rgb(102,102,102); 
      text-align:left;
      margin-top: 1.5em;
      padding: 0.7em;
   }

   div#question {
      background-color:white; 
      border: 2px solid rgb(102,102,102); 
      text-align:left;
      margin-top: 1.5em;
      margin-bottom: 90%;
      padding: 0.7em;
   }

   div#function {
      background-color:white; 
      border: 2px solid rgb(102,102,255); 
      text-align:left;
      margin-top: 0.3em;
      padding: 0.3em;
   }

   div#class {
      background-color:white; 
      border: 2px solid rgb(255,102,102); 
      text-align:left;
      margin-top: 0.3em;
      padding: 0.3em;
   }

   div#extension {
      background-color:#FDFDFD; 
      border: 1px solid rgb(102,102,102); 
      text-align:left;
      margin-top: 1.0em;
      padding: 0.7em;
   }

   div#logb {
      text-align:left;
      padding: 0.0em;
      float: left;
      background-color:#c0c0c0; 
      border: double ; 
      margin: 0.5em;
   }

   div#name {
      float: left;
   }
   div#line1 {
      float:left;
      width:100%;
      background-color:#dfdfdf; 
   }
   div#line2 {
      float:left;
      width:100%;
   }
   div#inc {
      float: right;
   }


   .code_box
   {
      color: black;
      margin: 1em 0.25in;
      padding: 0.5em;
      background: rgb(240,240,240);
      border-top: black dotted 1px;
      border-left: black dotted 1px;
      border-right: black solid 2px;
      border-bottom: black solid 2px;
   }



   .bdotted {border-bottom: 1px dotted}
   .bdashed {border-bottom: 1px dashed}
   .bsolid {border-bottom: 1px solid}
   .bdouble {border-bottom: 1px double}
   .bgroove {border-bottom: 1px groove}
   .bridge {border-bottom: 1px ridge}
   .binset {border-bottom: 1px inset}
   .boutset {border-bottom: 1px outset}

   div#row1 {
      background-color:#dfdfdf; 
   }
   div#row2 {
      background-color:#f2f2f2; 
   }

   div#typedefs {
      margin-left: 1.5em;
      margin-top: 0.2em;
      border: 1px dotted;
      width: 52em;
   }

   div#tdn {
      width: 10em;
   }

   .fullhr {
      clear: both;
   }

   body {
      text-align: center;
   }

   div#entire_page {
      width:62.5em;  
      text-align: left;
      margin-top: 0.4em;
      margin-left: auto;
      margin-right: auto;
   }
</style></head><body bgcolor="#EDF3EE"><a name="top"></a><div id="entire_page"><a href="http://dlib.net"><img src="dlib-logo.png"></a><table bgcolor="white" height="100%" bordercolor="#EDF3EE" CELLSPACING="0" CELLPADDING="10" style="border:0px;margin-top:2px"><tr height="100%"><td BGCOLOR="#F5F5F5" style="padding:7px; border: 1px solid rgb(102,102,102);" VALIGN="TOP" height="100%"><br><table WIDTH="145" height="100%"><tr><td VALIGN="TOP"><b>The Library</b><ul class="tree"><li><a href="algorithms.html">Algorithms</a></li><li><a href="api.html">API Wrappers</a></li><li><a href="bayes.html">Bayesian Nets</a></li><li><a href="compression.html">Compression</a></li><li><a href="containers.html">Containers</a></li><li><a href="graph_tools.html">Graph Tools</a></li><li><a href="imaging.html">Image Processing</a></li><li><a href="linear_algebra.html">Linear Algebra</a></li><li><a href="ml.html">Machine Learning</a></li><li><a href="metaprogramming.html">Metaprogramming</a></li><li><a href="other.html">Miscellaneous</a></li><li><a href="network.html">Networking</a></li><li><a href="optimization.html">Optimization</a></li><li><a href="parsing.html">Parsing</a></li></ul><br><b>Help/Info</b><ul class="tree"><li><a onclick="Toggle(this)" style="cursor: pointer;margin-left:-9px"><img src="plus.gif"><font color="green"><u>Examples: C++</u></font></a><ul style="display:none;"><li><a href="assignment_learning_ex.cpp.html">Assignment_Learning</a></li><li><a href="file_to_code_ex.cpp.html">Base64_Encoder</a></li><li><a href="bayes_net_ex.cpp.html">Bayesian_Network</a></li><li><a href="bayes_net_from_disk_ex.cpp.html">Bayesian_Network_From_Disk</a></li><li><a href="bayes_net_gui_ex.cpp.html">Bayesian_Network_GUI</a></li><li><a href="bridge_ex.cpp.html">Bridge</a></li><li><a href="bsp_ex.cpp.html">BSP</a></li><li><a href="compress_stream_ex.cpp.html#_top">Cmd_Line_Parser</a></li><li><a href="compress_stream_ex.cpp.html">Compress_Stream</a></li><li><a href="config_reader_ex.cpp.html">Config_File_Reader</a></li><li><a href="custom_trainer_ex.cpp.html">Custom_Trainers</a></li><li><a href="dir_nav_ex.cpp.html">Directory_Navigation</a></li><li><a href="empirical_kernel_map_ex.cpp.html">Empirical_Kernel_Map</a></li><li><a href="face_detection_ex.cpp.html">Face_Detection</a></li><li><a href="fhog_ex.cpp.html">FHOG_Feature_Extraction</a></li><li><a href="fhog_object_detector_ex.cpp.html">FHOG_Object_Detection</a></li><li><a href="graph_labeling_ex.cpp.html">Graph_Labeling</a></li><li><a href="gui_api_ex.cpp.html">GUI</a></li><li><a href="server_http_ex.cpp.html">HTTP_Server</a></li><li><a href="image_ex.cpp.html">Image</a></li><li><a href="iosockstream_ex.cpp.html">IO Socket Streams</a></li><li><a href="server_iostream_ex.cpp.html">IO Streams Server</a></li><li><a href="kcentroid_ex.cpp.html">Kernel_Centroid</a></li><li><a href="kkmeans_ex.cpp.html">Kernel_K-Means_Clustering</a></li><li><a href="krr_regression_ex.cpp.html">Kernel_Ridge_Regression</a></li><li><a href="krls_filter_ex.cpp.html">Kernel_RLS_Filtering</a></li><li><a href="krls_ex.cpp.html">Kernel_RLS_Regression</a></li><li><a href="krr_classification_ex.cpp.html">KRR_Classification</a></li><li><a href="learning_to_track_ex.cpp.html">Learning_to_Track</a></li><li><a href="linear_manifold_regularizer_ex.cpp.html">Linear_Manifold_Regularizer</a></li><li><a href="logger_ex.cpp.html">Logger</a></li><li><a href="logger_ex_2.cpp.html">Logger_Advanced</a></li><li><a href="logger_custom_output_ex.cpp.html">Logger_Custom_Output</a></li><li><a href="matrix_ex.cpp.html">Matrix</a></li><li><a href="matrix_expressions_ex.cpp.html">Matrix_Expressions</a></li><li><a href="member_function_pointer_ex.cpp.html">Member_Function_Pointer</a></li><li><a href="model_selection_ex.cpp.html">Model_Selection</a></li><li><a href="multiclass_classification_ex.cpp.html">Multiclass_Classification</a></li><li><a href="multithreaded_object_ex.cpp.html">Multithreaded_Object</a></li><li><a href="mlp_ex.cpp.html">Neural_Network</a></li><li><a href="least_squares_ex.cpp.html">Non-Linear Least Squares</a></li><li><a href="integrate_function_adapt_simp_ex.cpp.html">Numerical_Integration</a></li><li><a href="object_detector_ex.cpp.html">Object_Detector</a></li><li><a href="object_detector_advanced_ex.cpp.html">Object_Detector_Advanced</a></li><li><a href="one_class_classifiers_ex.cpp.html">One_Class_Classifiers</a></li><li><a href="svm_pegasos_ex.cpp.html">Online_SVM</a></li><li><a href="optimization_ex.cpp.html">Optimization</a></li><li><a href="parallel_for_ex.cpp.html">Parallel_For_Loops</a></li><li><a href="pipe_ex.cpp.html">Pipe</a></li><li><a href="pipe_ex_2.cpp.html">Pipe_2</a></li><li><a href="quantum_computing_ex.cpp.html">Quantum_Computing</a></li><li><a href="queue_ex.cpp.html">Queue</a></li><li><a href="rank_features_ex.cpp.html">Rank_Features</a></li><li><a href="rvm_ex.cpp.html">Relevance_Vector_Classification</a></li><li><a href="rvm_regression_ex.cpp.html">Relevance_Vector_Regression</a></li><li><a href="running_stats_ex.cpp.html">Running_Stats</a></li><li><a href="sequence_labeler_ex.cpp.html">Sequence_Labeling</a></li><li><a href="sequence_segmenter_ex.cpp.html">Sequence_Segmentation</a></li><li><a href="sockets_ex.cpp.html">Sockets</a></li><li><a href="sockstreambuf_ex.cpp.html">Sockstreambuf</a></li><li><a href="svm_sparse_ex.cpp.html">Sparse_Vectors</a></li><li><a href="std_allocator_ex.cpp.html">Std_C++_Allocator</a></li><li><a href="svm_struct_ex.cpp.html">Structural_Support_Vector_Machines</a></li><li><a href="svm_ex.cpp.html">Support_Vector_Machine</a></li><li><a href="svr_ex.cpp.html">Support_Vector_Regression</a></li><li><a href="surf_ex.cpp.html">SURF</a></li><li><a href="svm_rank_ex.cpp.html">SVM-Rank</a></li><li><a href="threaded_object_ex.cpp.html">Threaded_Object</a></li><li><a href="threads_ex.cpp.html">Threads</a></li><li><a href="thread_function_ex.cpp.html">Thread_Function</a></li><li><a href="thread_pool_ex.cpp.html">Thread_Pool</a></li><li><a href="timer_ex.cpp.html">Timer</a></li><li><a href="train_object_detector.cpp.html">Train_Object_Detector</a></li><li><a href="using_custom_kernels_ex.cpp.html">Using_Custom_Kernels</a></li><li><a href="xml_parser_ex.cpp.html">XML_Parser</a></li></ul></li><li><a onclick="Toggle(this)" style="cursor: pointer;margin-left:-9px"><img src="plus.gif"><font color="green"><u>Examples: Python</u></font></a><ul style="display:none;"><li><a href="face_detector.py.html">Face_Detector</a></li><li><a href="max_cost_assignment.py.html">Linear_Assignment_Problems</a></li><li><a href="sequence_segmenter.py.html">Sequence_Segmenter</a></li><li><a href="svm_struct.py.html">Structural_Support_Vector_Machines</a></li><li><a href="svm_rank.py.html">SVM-Rank</a></li><li><a href="train_object_detector.py.html">Train_Object_Detector</a></li></ul></li><li><a href="faq.html">FAQ</a></li><li><a href="index.html">Home</a></li><li><a href="compile.html">How to compile</a></li><li><a href="howto_contribute.html">How to contribute</a></li><li><a href="term_index.html">Index</a></li><li><a href="intro.html">Introduction</a></li><li><a href="license.html">License</a></li><li><a href="python/index.html">Python API</a></li><li><a href="books.html">Suggested Books</a></li></ul><br><b>Current Release</b><ul class="tree"><li><a href="change_log.html">Change Log</a></li><li><a href="release_notes.html">Release Notes</a></li><li>Version: 18.9</li></ul><br></td><td width="1"></td></tr><tr><td valign="bottom"><br><br><br><br><br><br><br><br><br>
      Last Modified:<br>May 22, 2014<br><br></td></tr></table></td><td VALIGN="TOP" width="100%" style="border: 1px solid rgb(102,102,102);"><center><h1>API Wrappers</h1></center><br><br><p>

      These wrappers provide a portable object oriented interface for networking, multithreading,  
      GUI development, and file browsing.
      Programs written using them can be compiled under POSIX or MS Windows platforms without changing the code.
      </p></td><td BGCOLOR="#F5F5F5" style="padding:7px; border: 1px solid rgb(102,102,102);" VALIGN="TOP" height="100%"><br><table WIDTH="180" height="100%"><tr><td VALIGN="TOP"><b>API</b><ul class="tree"><li><a href="#dir_nav" style="float:right"><img src="down.gif" border="0"></a><a onclick="Toggle(this)" style="cursor: pointer;"><img src="plus.gif" border="0"><font color="green"><u>dir_nav</u></font></a><ul style="display:none;"><li><a href="dlib/dir_nav/dir_nav_kernel_abstract.h.html#directory">directory</a></li><li><a href="dlib/dir_nav/dir_nav_kernel_abstract.h.html#file">file</a></li><li><a href="dlib/dir_nav/dir_nav_extensions_abstract.h.html#file_exists">file_exists</a></li><li><a href="dlib/dir_nav/dir_nav_kernel_abstract.h.html#get_filesystem_roots">get_filesystem_roots</a></li><li><a href="dlib/dir_nav/dir_nav_extensions_abstract.h.html#get_files_in_directory_tree">get_files_in_directory_tree</a></li><li><a href="dlib/dir_nav/dir_nav_extensions_abstract.h.html#get_parent_directory">get_parent_directory</a></li></ul></li><li><a href="#gui_core" style="float:right"><img src="down.gif" border="0"></a><a onclick="Toggle(this)" style="cursor: pointer;"><img src="plus.gif" border="0"><font color="green"><u>gui_core</u></font></a><ul style="display:none;"><li><a href="dlib/gui_core/gui_core_kernel_abstract.h.html#base_window">base_window</a></li><li><a href="dlib/gui_core/gui_core_kernel_abstract.h.html#canvas">canvas</a></li><li><a href="dlib/gui_core/gui_core_kernel_abstract.h.html#get_from_clipboard">get_from_clipboard</a></li><li><a href="dlib/gui_core/gui_core_kernel_abstract.h.html#put_on_clipboard">put_on_clipboard</a></li></ul></li><li><a href="#gui_widgets" style="float:right"><img src="down.gif" border="0"></a><a onclick="Toggle(this)" style="cursor: pointer;"><img src="plus.gif" border="0"><font color="green"><u>gui_widgets</u></font></a><ul style="display:none;"><li><a onclick="Toggle(this)" style="cursor: pointer;margin-left:-9px"><img src="plus.gif"><font color="green"><u>canvas drawing functions</u></font></a><ul style="display:none;"><li><a href="dlib/gui_widgets/canvas_drawing_abstract.h.html#draw_button_down">draw_button_down</a></li><li><a href="dlib/gui_widgets/canvas_drawing_abstract.h.html#draw_button_up">draw_button_up</a></li><li><a href="dlib/gui_widgets/canvas_drawing_abstract.h.html#draw_checkered">draw_checkered</a></li><li><a href="dlib/gui_widgets/canvas_drawing_abstract.h.html#draw_circle">draw_circle</a></li><li><a href="dlib/gui_widgets/canvas_drawing_abstract.h.html#draw_image">draw_image</a></li><li><a href="dlib/gui_widgets/canvas_drawing_abstract.h.html#draw_line">draw_line</a></li><li><a href="dlib/gui_widgets/canvas_drawing_abstract.h.html#draw_pixel">draw_pixel</a></li><li><a href="dlib/gui_widgets/canvas_drawing_abstract.h.html#draw_rectangle">draw_rectangle</a></li><li><a href="dlib/gui_widgets/canvas_drawing_abstract.h.html#draw_rounded_rectangle">draw_rounded_rectangle</a></li><li><a href="dlib/gui_widgets/canvas_drawing_abstract.h.html#draw_solid_circle">draw_solid_circle</a></li><li><a href="dlib/gui_widgets/canvas_drawing_abstract.h.html#draw_solid_convex_polygon">draw_solid_convex_polygon</a></li><li><a href="dlib/gui_widgets/canvas_drawing_abstract.h.html#draw_sunken_rectangle">draw_sunken_rectangle</a></li><li><a href="dlib/gui_widgets/canvas_drawing_abstract.h.html#fill_gradient_rounded">fill_gradient_rounded</a></li><li><a href="dlib/gui_widgets/canvas_drawing_abstract.h.html#fill_rect">fill_rect</a></li><li><a href="dlib/gui_widgets/canvas_drawing_abstract.h.html#fill_rect_with_vertical_gradient">fill_rect_with_vertical_gradient</a></li></ul></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#drawable" style="float:right"><img src="right.gif" border="0"></a><a onclick="Toggle(this)" style="cursor: pointer;margin-left:-9px"><img src="plus.gif" border="0"><font color="green"><u>drawable</u></font></a><ul style="display:none;"><li><a href="dlib/gui_widgets/drawable_abstract.h.html#disable">disable</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#disable_events">disable_events</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#enable">enable</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#enable_events">enable_events</a></li><li><a onclick="Toggle(this)" style="cursor: pointer;margin-left:-9px"><img src="plus.gif"><font color="green"><u>events</u></font></a><ul style="display:none;"><li><a href="dlib/gui_widgets/drawable_abstract.h.html#draw">draw</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#on_focus_gained">on_focus_gained</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#on_focus_lost">on_focus_lost</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#on_keydown">on_keydown</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#on_mouse_down">on_mouse_down</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#on_mouse_enter">on_mouse_enter</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#on_mouse_leave">on_mouse_leave</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#on_mouse_move">on_mouse_move</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#on_mouse_up">on_mouse_up</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#on_string_put">on_string_put</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#on_user_event">on_user_event</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#on_wheel_down">on_wheel_down</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#on_wheel_up">on_wheel_up</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#on_window_moved">on_window_moved</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#on_window_resized">on_window_resized</a></li></ul></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#events_are_enabled">events_are_enabled</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#hide">hide</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#is_enabled">is_enabled</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#is_hidden">is_hidden</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#main_font">main_font</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#next_free_user_event_number">next_free_user_event_number</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#parent_window">parent_window</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#set_main_font">set_main_font</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#set_pos">set_pos</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#set_z_order">set_z_order</a></li><li><a onclick="Toggle(this)" style="cursor: pointer;margin-left:-9px"><img src="plus.gif"><font color="green"><u>shape</u></font></a><ul style="display:none;"><li><a href="dlib/gui_widgets/drawable_abstract.h.html#bottom">bottom</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#get_rect">get_rect</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#height">height</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#left">left</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#right">right</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#top">top</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#width">width</a></li></ul></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#show">show</a></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#z_order">z_order</a></li></ul></li><li><a href="dlib/gui_widgets/drawable_abstract.h.html#drawable_window">drawable_window</a></li><li><a onclick="Toggle(this)" style="cursor: pointer;margin-left:-9px"><img src="plus.gif"><font color="green"><u>fonts</u></font></a><ul style="display:none;"><li><a href="dlib/gui_widgets/fonts_abstract.h.html#bdf_font">bdf_font</a></li><li><a href="dlib/gui_widgets/fonts_abstract.h.html#default_font">default_font</a></li><li><a href="dlib/gui_widgets/fonts_abstract.h.html#font">font</a></li><li><a href="dlib/gui_widgets/fonts_abstract.h.html#get_native_font">get_native_font</a></li><li><a href="dlib/gui_widgets/fonts_abstract.h.html#letter">letter</a></li></ul></li><li><a onclick="Toggle(this)" style="cursor: pointer;margin-left:-9px"><img src="plus.gif"><font color="green"><u>styles</u></font></a><ul style="display:none;"><li><a href="dlib/gui_widgets/style_abstract.h.html#button_style">button_style</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#button_style_arrow">button_style_arrow</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#button_style_default">button_style_default</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#button_style_toolbar1">button_style_toolbar1</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#button_style_toolbar_icon1">button_style_toolbar_icon1</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#list_box_style">list_box_style</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#list_box_style_default">list_box_style_default</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#scrollable_region_style">scrollable_region_style</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#scrollable_region_style_default">scrollable_region_style_default</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#scroll_bar_style">scroll_bar_style</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#scroll_bar_style_default">scroll_bar_style_default</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#text_box_style">text_box_style</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#text_box_style_default">text_box_style_default</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#text_field_style">text_field_style</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#text_field_style_default">text_field_style_default</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#toggle_button_style">toggle_button_style</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#toggle_button_style_check_box">toggle_button_style_check_box</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#toggle_button_style_default">toggle_button_style_default</a></li><li><a href="dlib/gui_widgets/style_abstract.h.html#toggle_button_style_radio_button">toggle_button_style_radio_button</a></li></ul></li><li><a onclick="Toggle(this)" style="cursor: pointer;margin-left:-9px"><img src="plus.gif"><font color="green"><u>widgets</u></font></a><ul style="display:none;"><li><a href="dlib/gui_widgets/base_widgets_abstract.h.html#button">button</a></li><li><a href="dlib/gui_widgets/base_widgets_abstract.h.html#button_action">button_action</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#check_box">check_box</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#directed_graph_drawer">directed_graph_drawer</a></li><li><a href="dlib/gui_widgets/base_widgets_abstract.h.html#draggable">draggable</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#image_display">image_display</a></li><li><a href="dlib/gui_widgets/base_widgets_abstract.h.html#image_widget">image_widget</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#image_window">image_window</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#label">label</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#list_box">list_box</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#menu_bar">menu_bar</a></li><li><a href="dlib/gui_widgets/base_widgets_abstract.h.html#menu_item">menu_item</a></li><li><a href="dlib/gui_widgets/base_widgets_abstract.h.html#menu_item_separator">menu_item_separator</a></li><li><a href="dlib/gui_widgets/base_widgets_abstract.h.html#menu_item_submenu">menu_item_submenu</a></li><li><a href="dlib/gui_widgets/base_widgets_abstract.h.html#menu_item_text">menu_item_text</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#message_box">message_box</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#message_box_blocking">message_box_blocking</a></li><li><a href="dlib/gui_widgets/base_widgets_abstract.h.html#mouse_over_event">mouse_over_event</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#mouse_tracker">mouse_tracker</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#named_rectangle">named_rectangle</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#open_existing_file_box">open_existing_file_box</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#open_file_box">open_file_box</a></li><li><a href="dlib/gui_widgets/base_widgets_abstract.h.html#popup_menu">popup_menu</a></li><li><a href="dlib/gui_widgets/base_widgets_abstract.h.html#popup_menu_region">popup_menu_region</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#radio_button">radio_button</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#save_file_box">save_file_box</a></li><li><a href="dlib/gui_widgets/base_widgets_abstract.h.html#scrollable_region">scrollable_region</a></li><li><a href="dlib/gui_widgets/base_widgets_abstract.h.html#scroll_bar">scroll_bar</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#tabbed_display">tabbed_display</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#text_box">text_box</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#text_field">text_field</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#text_grid">text_grid</a></li><li><a href="dlib/gui_widgets/widgets_abstract.h.html#toggle_button">toggle_button</a></li><li><a href="dlib/gui_widgets/base_widgets_abstract.h.html#tooltip">tooltip</a></li><li><a href="dlib/gui_widgets/base_widgets_abstract.h.html#widget_group">widget_group</a></li><li><a href="dlib/gui_widgets/base_widgets_abstract.h.html#zoomable_region">zoomable_region</a></li></ul></li></ul></li><li><a href="#misc_api" style="float:right"><img src="down.gif" border="0"></a><a onclick="Toggle(this)" style="cursor: pointer;"><img src="plus.gif" border="0"><font color="green"><u>misc_api</u></font></a><ul style="display:none;"><li><a href="dlib/misc_api/misc_api_kernel_abstract.h.html#create_directory">create_directory</a></li><li><a href="dlib/misc_api/misc_api_kernel_abstract.h.html#get_current_dir">get_current_dir</a></li><li><a href="dlib/misc_api/misc_api_kernel_abstract.h.html#locally_change_current_dir">locally_change_current_dir</a></li><li><a href="dlib/misc_api/misc_api_kernel_abstract.h.html#set_current_dir">set_current_dir</a></li><li><a href="dlib/misc_api/misc_api_kernel_abstract.h.html#sleep">sleep</a></li><li><a href="dlib/misc_api/misc_api_kernel_abstract.h.html#timestamper">timestamper</a></li></ul></li><li><a href="#sockets" style="float:right"><img src="down.gif" border="0"></a><a onclick="Toggle(this)" style="cursor: pointer;"><img src="plus.gif" border="0"><font color="green"><u>sockets</u></font></a><ul style="display:none;"><li><a onclick="Toggle(this)" style="cursor: pointer;margin-left:-9px"><img src="plus.gif"><font color="green"><u>extensions</u></font></a><ul style="display:none;"><li><a href="dlib/sockets/sockets_extensions_abstract.h.html#close_gracefully">close_gracefully</a></li><li><a href="dlib/sockets/sockets_extensions_abstract.h.html#connect">connect</a></li><li><a href="dlib/sockets/sockets_extensions_abstract.h.html#is_ip_address">is_ip_address</a></li><li><a href="dlib/sockets/sockets_extensions_abstract.h.html#network_address">network_address</a></li></ul></li><li><a onclick="Toggle(this)" style="cursor: pointer;margin-left:-9px"><img src="plus.gif"><font color="green"><u>functions</u></font></a><ul style="display:none;"><li><a href="dlib/sockets/sockets_kernel_abstract.h.html#create_connection">create_connection</a></li><li><a href="dlib/sockets/sockets_kernel_abstract.h.html#create_listener">create_listener</a></li><li><a href="dlib/sockets/sockets_kernel_abstract.h.html#get_local_hostname">get_local_hostname</a></li><li><a href="dlib/sockets/sockets_kernel_abstract.h.html#hostname_to_ip">hostname_to_ip</a></li><li><a href="dlib/sockets/sockets_kernel_abstract.h.html#ip_to_hostname">ip_to_hostname</a></li></ul></li><li><a onclick="Toggle(this)" style="cursor: pointer;margin-left:-9px"><img src="plus.gif"><font color="green"><u>objects</u></font></a><ul style="display:none;"><li><a href="dlib/sockets/sockets_kernel_abstract.h.html#connection">connection</a></li><li><a href="dlib/sockets/sockets_kernel_abstract.h.html#listener">listener</a></li></ul></li></ul></li><li><a href="#threads" style="float:right"><img src="down.gif" border="0"></a><a onclick="Toggle(this)" style="cursor: pointer;"><img src="plus.gif" border="0"><font color="green"><u>threads</u></font></a><ul style="display:none;"><li><a href="dlib/threads/threads_kernel_abstract.h.html#create_new_thread">create_new_thread</a></li><li><a onclick="Toggle(this)" style="cursor: pointer;margin-left:-9px"><img src="plus.gif"><font color="green"><u>extensions</u></font></a><ul style="display:none;"><li><a href="#auto_mutex">auto_mutex</a></li><li><a href="#auto_mutex_readonly">auto_mutex_readonly</a></li><li><a href="#auto_unlock">auto_unlock</a></li><li><a href="#auto_unlock_readonly">auto_unlock_readonly</a></li><li><a href="#create_new_thread_extension">create_new_thread_extension</a></li><li><a href="dlib/threads/thread_pool_extension_abstract.h.html#future">future</a></li><li><a href="#multithreaded_object">multithreaded_object</a></li><li><a href="#parallel_for">parallel_for</a></li><li><a href="#read_write_mutex">read_write_mutex</a></li><li><a href="#rmutex">rmutex</a></li><li><a href="#rsignaler">rsignaler</a></li><li><a href="#threaded_object">threaded_object</a></li><li><a href="#thread_function">thread_function</a></li><li><a href="#thread_pool">thread_pool</a></li><li><a href="#thread_specific_data">thread_specific_data</a></li></ul></li><li><a href="dlib/threads/threads_kernel_abstract.h.html#get_thread_id">get_thread_id</a></li><li><a href="dlib/threads/threads_kernel_abstract.h.html#is_dlib_thread">is_dlib_thread</a></li><li><a href="dlib/threads/threads_kernel_abstract.h.html#mutex">mutex</a></li><li><a href="dlib/threads/threads_kernel_abstract.h.html#register_thread_end_handler">register_thread_end_handler</a></li><li><a href="dlib/threads/threads_kernel_abstract.h.html#signaler">signaler</a></li><li><a href="dlib/threads/threads_kernel_abstract.h.html#unregister_thread_end_handler">unregister_thread_end_handler</a></li></ul></li></ul><br></td><td width="1"></td></tr><tr><td valign="bottom"></td></tr></table></td></tr></table><a name="dir_nav"><div id="component"><a href="#top"><font size="2"><center>[top]</center></font></a><h1 style="margin:0px;">dir_nav</h1><BR><BR>
            This is a set of objects that provide an easy and portable way to traverse a directory tree. 
         <BR><BR><B><font style="font-size:1.4em"><tt>#include &lt;dlib/dir_nav.h&gt;</tt></font></B><BR><b><a href="dlib/dir_nav/dir_nav_kernel_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b><BR>C++ Example Programs: <a href="dir_nav_ex.cpp.html">dir_nav_ex.cpp</a><BR><BR><B>Implementations:</B><blockquote><a href="dlib/dir_nav/dir_nav_kernel_1.h.html">dir_nav_kernel_1</a>:
                   
                  MS Windows implementation
               <br><a href="dlib/dir_nav/dir_nav_kernel_2.h.html">dir_nav_kernel_2</a>:
                   
                  POSIX implementation
               <br></blockquote><br><center><h1>Extensions to dir_nav</h1></center><div id="extension"><a name="dir_nav_extensions"><B><font size="5">dir_nav_extensions</font></B></a><Br><BR> 
                     This is just some miscellaneous extensions to the dir_nav component. 
               <BR><BR><b><a href="dlib/dir_nav/dir_nav_extensions_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b></div><center></center></div></a><a name="gui_core"><div id="component"><a href="#top"><font size="2"><center>[top]</center></font></a><h1 style="margin:0px;">gui_core</h1><BR><BR>
                This is a set of objects and functions which provide a very basic
                framework for manipulating windows.  It is intended to provide a portable
                interface which can be used to build a more complex windowing toolkit.
         <BR><BR><B><font style="font-size:1.4em"><tt>#include &lt;dlib/gui_core.h&gt;</tt></font></B><BR><b><a href="dlib/gui_core/gui_core_kernel_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b><BR><BR><B>Implementations:</B><blockquote><a href="dlib/gui_core/gui_core_kernel_1.h.html">gui_core_kernel_1</a>:
                   
                  MS Windows implementation
               <br><a href="dlib/gui_core/gui_core_kernel_2.h.html">gui_core_kernel_2</a>:
                   
                  X Windows implementation
               <br></blockquote><center></center></div></a><a name="gui_widgets"><div id="component"><a href="#top"><font size="2"><center>[top]</center></font></a><h1 style="margin:0px;">gui_widgets</h1><BR><BR><p>
            This component is a collection of various windowing widgets such as buttons,
            labels, text boxes, and so on.  It also includes the drawable
            interface, drawable_window, and font handling objects.  
            <a href="dlib/gui_widgets/widgets_abstract.h.html">dlib/gui_widgets/widgets_abstract.h</a> 
            defines all of the high level graphical widgets provided by this
            component that can appear in a drawable_window.  To view the specifications for the other members of this 
            component look at <a href="dlib/gui_widgets/fonts_abstract.h.html">dlib/gui_widgets/fonts_abstract.h</a>,  
            <a href="dlib/gui_widgets/drawable_abstract.h.html">dlib/gui_widgets/drawable_abstract.h</a>, 
            and <a href="dlib/gui_widgets/base_widgets_abstract.h.html">dlib/gui_widgets/base_widgets_abstract.h</a>.
            </p><p>This component isn't actually a wrapper on top of OS APIs.  Rather, it is
            implemented on top of the <a href="#gui_core">gui_core</a> 
            component.  I put it on this page just because I expect that people would
            look here when searching for the sort of functionality provided by this component. 
            </p><center><a name="Primary%20widgets"></a><h2>Primary widgets</h2></center><table><tr><td align="center"><a href="dlib/gui_widgets/base_widgets_abstract.h.html#button"><img src="guipics/button.png" border="0" height="" width="" alt=""></a></td><td align="center"><a href="dlib/gui_widgets/widgets_abstract.h.html#check_box"><img src="guipics/check_box.png" border="0" height="" width="" alt=""></a></td><td align="center"><a href="dlib/gui_widgets/widgets_abstract.h.html#radio_button"><img src="guipics/radio_button.png" border="0" height="" width="" alt=""></a></td><td align="center"><a href="dlib/gui_widgets/widgets_abstract.h.html#label"><img src="guipics/label.png" border="0" height="" width="" alt=""></a></td></tr><tr><td align="center"><a href="dlib/gui_widgets/base_widgets_abstract.h.html#scroll_bar"><img src="guipics/scroll_bar.png" border="0" height="" width="" alt=""></a></td><td align="center"><a href="dlib/gui_widgets/widgets_abstract.h.html#text_field"><img src="guipics/text_field.png" border="0" height="" width="" alt=""></a></td><td align="center"><a href="dlib/gui_widgets/widgets_abstract.h.html#text_box"><img src="guipics/text_box.png" border="0" height="" width="" alt=""></a></td><td align="center"><a href="dlib/gui_widgets/widgets_abstract.h.html#text_grid"><img src="guipics/text_grid.png" border="0" height="" width="" alt=""></a></td></tr><tr><td align="center"><a href="dlib/gui_widgets/widgets_abstract.h.html#list_box"><img src="guipics/list_box.png" border="0" height="" width="" alt=""></a></td><td align="center"><a href="dlib/gui_widgets/widgets_abstract.h.html#menu_bar"><img src="guipics/menu_bar.png" border="0" height="" width="" alt=""></a></td><td align="center"><a href="dlib/gui_widgets/base_widgets_abstract.h.html#popup_menu"><img src="guipics/popup_menu.png" border="0" height="" width="" alt=""></a></td><td align="center"><a href="dlib/gui_widgets/widgets_abstract.h.html#tabbed_display"><img src="guipics/tabbed_display.png" border="0" height="" width="" alt=""></a></td></tr><tr><td align="center"><a href="dlib/gui_widgets/widgets_abstract.h.html#named_rectangle"><img src="guipics/named_rectangle.png" border="0" height="" width="" alt=""></a></td><td align="center"><a href="dlib/gui_widgets/widgets_abstract.h.html#image_window"><img src="guipics/image_window.jpg" border="0" height="" width="" alt=""></a></td><td align="center"><a href="dlib/gui_widgets/widgets_abstract.h.html#directed_graph_drawer"><img src="guipics/directed_graph_drawer.png" border="0" height="" width="" alt=""></a></td><td align="center"><a href="dlib/gui_widgets/widgets_abstract.h.html#mouse_tracker"><img src="guipics/mouse_tracker.png" border="0" height="" width="" alt=""></a></td></tr><tr><td align="center"><a href="dlib/gui_widgets/widgets_abstract.h.html#message_box"><img src="guipics/message_box.png" border="0" height="" width="" alt=""></a></td><td align="center"><a href="dlib/gui_widgets/widgets_abstract.h.html#open_existing_file_box"><img src="guipics/open_existing_file_box.png" border="0" height="" width="" alt=""></a></td><td align="center"><a href="dlib/gui_widgets/widgets_abstract.h.html#open_file_box"><img src="guipics/open_file_box.png" border="0" height="" width="" alt=""></a></td><td align="center"><a href="dlib/gui_widgets/widgets_abstract.h.html#save_file_box"><img src="guipics/save_file_box.png" border="0" height="" width="" alt=""></a></td></tr></table><BR><BR><B><font style="font-size:1.4em"><tt>#include &lt;dlib/gui_widgets.h&gt;</tt></font></B><BR>C++ Example Programs: <a href="gui_api_ex.cpp.html">gui_api_ex.cpp</a>,
               <a href="image_ex.cpp.html">image_ex.cpp</a>,
               <a href="surf_ex.cpp.html">surf_ex.cpp</a>,
               <a href="bayes_net_gui_ex.cpp.html">bayes_net_gui_ex.cpp</a><br><br><center></center></div></a><a name="misc_api"><div id="component"><a href="#top"><font size="2"><center>[top]</center></font></a><h1 style="margin:0px;">misc_api</h1><BR><BR>
            This is just a collection of miscellaneous APIs that were small/simple 
            enough not to warrant their own module.
         <BR><BR><B><font style="font-size:1.4em"><tt>#include &lt;dlib/misc_api.h&gt;</tt></font></B><BR><b><a href="dlib/misc_api/misc_api_kernel_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b><BR><BR><B>Implementations:</B><blockquote><a href="dlib/misc_api/misc_api_kernel_1.h.html">misc_api_kernel_1</a>:
                   
                  MS Windows implementation
               <br><a href="dlib/misc_api/misc_api_kernel_2.h.html">misc_api_kernel_2</a>:
                   
                  POSIX implementation
               <br></blockquote><center></center></div></a><a name="sockets"><div id="component"><a href="#top"><font size="2"><center>[top]</center></font></a><h1 style="margin:0px;">sockets</h1><BR><BR>
            This is a set of objects that provides an easy to use and object oriented 
            interface for dealing with TCP networking. There are currently two implementations,
            one for UNIX and another for all versions of Windows after Windows95.
            Both provide the exact same interface so programs written with them can be
            recompiled on either platform without a problem.
            <p>
              You also may want to take note of the <a href="other.html#timeout">timeout</a> object.
              It provides a mechanism which you can use to add a timeout to a network operation.  
            </p><BR><BR><B><font style="font-size:1.4em"><tt>#include &lt;dlib/sockets.h&gt;</tt></font></B><BR><b><a href="dlib/sockets/sockets_kernel_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b><BR>C++ Example Programs: <a href="iosockstream_ex.cpp.html">iosockstream_ex.cpp</a>,
               <a href="sockets_ex.cpp.html">sockets_ex.cpp</a>,
               <a href="sockstreambuf_ex.cpp.html">sockstreambuf_ex.cpp</a>,
               <a href="server_http_ex.cpp.html">server_http_ex.cpp</a>,
               <a href="server_iostream_ex.cpp.html">server_iostream_ex.cpp</a><BR><BR><B>Implementations:</B><blockquote><a href="dlib/sockets/sockets_kernel_1.h.html">sockets_kernel_1</a>:
                   
                  MS Windows implementation
               <br><a href="dlib/sockets/sockets_kernel_2.h.html">sockets_kernel_2</a>:
                   
                  POSIX implementation
               <br></blockquote><br><center><h1>Extensions to sockets</h1></center><div id="extension"><a name="sockets_extensions"><B><font size="5">sockets_extensions</font></B></a><Br><BR> 
                     This is just some miscellaneous extensions to the socket api.
               <BR><BR><b><a href="dlib/sockets/sockets_extensions_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b></div><center></center></div></a><a name="threads"><div id="component"><a href="#top"><font size="2"><center>[top]</center></font></a><h1 style="margin:0px;">threads</h1><BR><BR>
            This is a set of objects that provides an easy to use and object oriented interface 
            for creating multi-threaded programs. There are currently two implementations, one 
            for UNIX and another for any variant of MS Windows after Windows 95. Both provide 
            the exact same interface so programs written with them can be recompiled on either 
            platform without a problem.  
            <p>
              You also probably want to take note of the <a href="other.html#pipe">pipe</a> object.
              It provides an easy to use typesafe mechanism to send messages between threads.
            </p><BR><BR><B><font style="font-size:1.4em"><tt>#include &lt;dlib/threads.h&gt;</tt></font></B><BR><b><a href="dlib/threads/threads_kernel_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b><BR>C++ Example Programs: <a href="threads_ex.cpp.html">threads_ex.cpp</a>,
               <a href="logger_ex_2.cpp.html">logger_ex_2.cpp</a>,
               <a href="pipe_ex.cpp.html">pipe_ex.cpp</a>,
               <a href="multithreaded_object_ex.cpp.html">multithreaded_object_ex.cpp</a>,
               <a href="threaded_object_ex.cpp.html">threaded_object_ex.cpp</a>,
               <a href="thread_function_ex.cpp.html">thread_function_ex.cpp</a>,
               <a href="thread_pool_ex.cpp.html">thread_pool_ex.cpp</a><BR><BR><B>Implementations:</B><blockquote><a href="dlib/threads/threads_kernel_1.h.html">threads_kernel_1</a>:
                   
                  MS Windows implementation
               <br><a href="dlib/threads/threads_kernel_2.h.html">threads_kernel_2</a>:
                   
                  POSIX implementation
               <br></blockquote><br><center><h1>Extensions to threads</h1></center><div id="extension"><a name="auto_mutex"><B><font size="5">auto_mutex</font></B></a><Br><BR> 
                  This extension adds a mechanism to automatically lock and unlock a mutex.
                  Also note that this extension is included by dlib/threads.h so you don't have to include 
                  anything extra to get it.
               <BR><BR><b><a href="dlib/threads/auto_mutex_extension_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b><BR>C++ Example Programs: <a href="threads_ex.cpp.html">threads_ex.cpp</a></div><div id="extension"><a name="auto_mutex_readonly"><B><font size="5">auto_mutex_readonly</font></B></a><Br><BR> 
                  This extension adds a mechanism to automatically perform a readonly lock and unlock 
                  of a <a href="#read_write_mutex">read_write_mutex</a>.
                  Also note that this extension is included by dlib/threads.h so you don't have to include 
                  anything extra to get it.
               <BR><BR><b><a href="dlib/threads/auto_mutex_extension_abstract.h.html#auto_mutex_readonly"><font style="font-size:1.4em">Detailed Documentation</font></a></b></div><div id="extension"><a name="auto_unlock"><B><font size="5">auto_unlock</font></B></a><Br><BR> 
                  This extension adds a mechanism to automatically unlock a mutex.
                  Also note that this extension is included by dlib/threads.h so you don't have to include 
                  anything extra to get it.
               <BR><BR><b><a href="dlib/threads/auto_unlock_extension_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b></div><div id="extension"><a name="auto_unlock_readonly"><B><font size="5">auto_unlock_readonly</font></B></a><Br><BR> 
                  This extension adds a mechanism to automatically remove a readonly unlock from a <a href="#read_write_mutex">read_write_mutex</a>.
                  Also note that this extension is included by dlib/threads.h so you don't have to include 
                  anything extra to get it.
               <BR><BR><b><a href="dlib/threads/auto_unlock_extension_abstract.h.html#auto_unlock_readonly"><font style="font-size:1.4em">Detailed Documentation</font></a></b></div><div id="extension"><a name="create_new_thread_extension"><B><font size="5">create_new_thread_extension</font></B></a><Br><BR> 
                  This extension adds some templated overloads to the 
                  <a href="dlib/threads/threads_kernel_abstract.h.html#create_new_thread">create_new_thread()</a> function.  They allow you to create new threads using member functions from a class.
                  Also note that this extension is included by dlib/threads.h so you don't have to include 
                  anything extra to get it.
               <BR><BR><b><a href="dlib/threads/create_new_thread_extension_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b></div><div id="extension"><a name="multithreaded_object"><B><font size="5">multithreaded_object</font></B></a><Br><BR> 
                This object represents a multithreaded object.  It is similar to 
                the <a href="#threaded_object">threaded_object</a> except it allows you to have many threads in a 
                single object rather than just one.  
               <BR><BR><b><a href="dlib/threads/multithreaded_object_extension_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b><BR>C++ Example Programs: <a href="multithreaded_object_ex.cpp.html">multithreaded_object_ex.cpp</a>,
               <a href="pipe_ex.cpp.html">pipe_ex.cpp</a></div><div id="extension"><a name="parallel_for"><B><font size="5">parallel_for</font></B></a><Br><BR> 
                  This is a set of functions for executing the contents of a for loop in parallel.  
                  It is useful for taking advantage of multi-processor systems.  
               <BR><BR><b><a href="dlib/threads/parallel_for_extension_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b><BR>C++ Example Programs: <a href="parallel_for_ex.cpp.html">parallel_for_ex.cpp</a></div><div id="extension"><a name="read_write_mutex"><B><font size="5">read_write_mutex</font></B></a><Br><BR> 
                  This extension adds a mutex object that can perform both normal "write locks" as well as "readonly locks".  
                  See the specification for details.
                  Also note that this extension is included by dlib/threads.h so you don't have to include 
                  anything extra to get it.
               <BR><BR><b><a href="dlib/threads/read_write_mutex_extension_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b></div><div id="extension"><a name="rmutex"><B><font size="5">rmutex</font></B></a><Br><BR> 
                  This extension adds a mutex object that can handle recursive calls
                  to lock().  
                  Also note that this extension is included by dlib/threads.h so you don't have to include 
                  anything extra to get it.
               <BR><BR><b><a href="dlib/threads/rmutex_extension_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b></div><div id="extension"><a name="rsignaler"><B><font size="5">rsignaler</font></B></a><Br><BR> 
                  This extension adds a signaler object that can be used with the rmutex object. 
                  Also note that this extension is included by dlib/threads.h so you don't have to include 
                  anything extra to get it.
               <BR><BR><b><a href="dlib/threads/rsignaler_extension_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b></div><div id="extension"><a name="threaded_object"><B><font size="5">threaded_object</font></B></a><Br><BR> 
                     This extension represents a simple threaded object.  It provides a convenient 
                     mechanism to create an object that contains a thread.
               <BR><BR><b><a href="dlib/threads/threaded_object_extension_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b><BR>C++ Example Programs: <a href="threaded_object_ex.cpp.html">threaded_object_ex.cpp</a></div><div id="extension"><a name="thread_function"><B><font size="5">thread_function</font></B></a><Br><BR> 
                This object represents a thread on a global C++ function.  That is, it allows you 
                to run a global function in its own thread.
               <BR><BR><b><a href="dlib/threads/thread_function_extension_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b><BR>C++ Example Programs: <a href="thread_function_ex.cpp.html">thread_function_ex.cpp</a></div><div id="extension"><a name="thread_pool"><B><font size="5">thread_pool</font></B></a><Br><BR><p>
                  This object represents a fixed size group of threads which you can
                  submit tasks to and then wait for those tasks to be completed.  It also
                  provides a <a href="dlib/threads/thread_pool_extension_abstract.h.html#future">future</a> object
                  that provides a container which allows you to safely pass objects into the tasks. 
                  </p>
                  The implementation of this extension can be found 
                  <a href="dlib/threads/thread_pool_extension.h.html">here</a>.  It is 
                  implemented such that no memory allocations occur after the thread pool
                  has been constructed so long as the user doesn't call
                  any of the add_task_by_value() routines.  The future object also doesn't
                  perform any memory allocations or contain any system resources such as mutex objects. 
               <BR><BR><b><a href="dlib/threads/thread_pool_extension_abstract.h.html#thread_pool"><font style="font-size:1.4em">Detailed Documentation</font></a></b><BR>C++ Example Programs: <a href="thread_pool_ex.cpp.html">thread_pool_ex.cpp</a></div><div id="extension"><a name="thread_specific_data"><B><font size="5">thread_specific_data</font></B></a><Br><BR> 
                     This extension adds the ability to easily create thread specific data.
               <BR><BR><b><a href="dlib/threads/thread_specific_data_extension_abstract.h.html"><font style="font-size:1.4em">Detailed Documentation</font></a></b></div><center></center></div></a></div></body></html>
